我要投稿
编读往来
加入收藏
【2003年2月7日】    专 题 / 技 术 / 产 品 / 应 用 / 网 络 / 编 程 / 技 巧

也谈基于Web的Form多响应技术


湖南康大网景有限公司 周亚新


《计算机世界》2000年第35期B13版有一篇题为“基于Web的Form多响应技术"的文章,文中采用INPUT的SUBMIT属性传递不同的值从而进入不同的子程序,以达到“多响应" 的效果。笔者读后感到文章中的方法只能用于二三种响应的场合,真正要达到“多响应"的效果,必须采用另外的方法。现将这种基于Web的Form多响应方法介绍如下。
在HTML的Form结构中采用INPUT的SELECT属性
在HTML的Form结构中采用INPUT传递不同的值从而进入不同的子程序是一条不错的思路,但是采用INPUT的SUBMIT属性却有局限性:由于每一个SUBMIT均要占据一个按钮位置,当响应量多时将会是满屏按钮,既不美观又容易搞错。其实对于多重选择场合应当采用INPUT的SELECT属性,无论多少种选择都只占据屏幕中一小段文字的位置;提交按钮另外设置,可以及时改正错误的选择。
下面是一个页面范例的源码:用户选择所属地域,并输入姓名与密码登录。显然,如果采用INPUT的SUBMIT属性将有34个提交按钮出现在页面上,完全不可行。
< HTML >
< HEAD >
< TITLE >范例< /TITLE >
< META HTTP-EQUIV=“Content-Type"
CONTENT=“text/html; charset=gb_2312-80" >
< /HEAD >
< BODY >
< form action=“cgi-bin/mm.pl" method=“post" >
< br >尊姓大名:
< input type=“text" name=“xm" size=10 >
< br >密码:
< input type=“password" name=“ps" size=14 >
< br >所在地域:< select name=“province" >
< option value=“01" >黑龙江
< option value=“02" >吉林
< option value=“03" >辽宁
< option value=“04" >内蒙古
< option value=“05" >天津
< option value=“06" >北京
< option value=“07" >河北
< option value=“08" >山东
< option value=“09" >河南
< option value=“10" >陕西
< option value=“11" >甘肃
< option value=“12" >宁夏
< option value=“13" >青海
< option value=“14" >新疆
< option value=“15" >西藏
< option value=“16" >四川
< option value=“17" >云南
< option value=“18" >贵州
< option value=“19" >重庆
< option value=“20" >湖北
< option value=“21" >湖南
< option value=“22" >江西
< option value=“23" >安徽
< option value=“24" >江苏
< option value=“25" >上海
< option value=“26" >浙江
< option value=“27" >福建
< option value=“28" >广东
< option value=“29" >广西
< option value=“30" >海南
< option value=“31" >香港
< option value=“32" >澳门
< option value=“33" >台湾
< option value=“34" >海外
< /select >
< br >< input type=“submit" value=
“填写无误,可以发出" >
< /form >
< /BODY >
< /HTML >
在服务器端采用Perl的关联性数组进行分流
当Form中的数据提交到服务器端的CGI程序处理时,用什么方法进行分流呢?对于多重选择场合,采用单纯的if...else结构既费时又程序长,应当采用更好的结构。
在C语言中,可以用switch语句进行分流。不过CGI程序用得最多的是Perl语言,Perl语言具有极佳的稳定性、跨平台性,并且开放源码。因此,下面的CGI程序采用的是Perl5.0。
Perl5.0中的关联性数组(又叫哈希结构)具有数据对应特性,适合于根据提交到服务器端的数据进行分流。
程序中的各省份用户名单是一个文本数据库,由各用户姓名、密码组成。“登录成功"、“密码错误"、“查无此人"三个子程序用于输出相应Web 页面,前一个比较复杂,后两个相当简单,故均略去。
#!/usr/bin/perl
use CGI;
#调用CGI模块
%p=(01= >‘黑龙江',02= >‘吉林',03= >
‘辽宁',04= >‘内蒙古',05= >‘天津',06= >
‘北京',07= >‘河北',08= >‘山东',09= >‘河南',
10= >‘陕西',11= >‘甘肃',12= >‘宁夏',13= >
‘青海',14= >‘新疆',15= >‘西藏',16= >‘四川',
17= >‘云南',18= >‘贵州',19= >‘重庆',20= >‘湖北',
21= >‘湖南',22= >‘江西',23= >‘安徽',24= >‘江苏',
25= >‘上海',26= >‘浙江',27= >‘福建',28= >‘广东',
29= >‘广西',30= >‘海南',31= >‘香港',32= >‘澳门',
33= >‘台湾',34= >‘海外');
#建立数字与省份的关联性数组
$db=param(‘province');
$dbf=$p{$db}.“用户名单";
#读入省份代码,转化为相应省份用户名单
$xm=param(‘xm');
$ps=param(‘ps');
#读入姓名、密码
open (DB,“$dbf")||die “$!";
#打开相应省份用户名单
%qc=< DB >;
#将用户名单与密码读入一个关联性数组
close (DB);
#关闭该省份用户名单
if (exists $qc($xm,$db)) {
#检验是否有此用户
if ($qc($xm)==$ps) {
#检验密码是否正确
pass($xm);}
#若有此用户且密码正确,进入
“登录成功"子程序
else{nopass();}
#若有此用户但密码不正确,进入
“密码错误"子程序
else{nobody();}
#若无此用户,进入“查无此人"子程序
结 语
其实,本文所介绍方法已经有应用,例如广东视聆通 (www.21cn.com)的免费邮箱登录。
此外,本文所介绍“基于Web的Form多响应方法",每个Form仍然只能有一个服务器端程序响应,不过进行子程序分流罢了。因此这种方法适用于相似多响应,对于各响应完全不同的情况作用不大。当然,Web上同一Form各响应完全不同似乎不太可能。

(网页编辑:徐向阳

您的姓名:  您朋友的E-mail: 
[关闭窗口]


Copyright(C) ccw.com.cn,All rights reserved

中国计算机世界出版服务公司版权所有